﻿<!DOCTYPE html>
<html ng-app="demoApp" lang="en">
<head>
    <title id='Description'>Grid with Command Column.</title>
    <meta name="description" content="This sample demonstrates how we can create Command Column in jqwidgets Grid widget." />
    <link rel="stylesheet" href="../../../jqwidgets/styles/jqx.base.css" type="text/css" />
    <script type="text/javascript" src="../../../scripts/angular.min.js"></script> 
    <script type="text/javascript" src="../../../scripts/jquery-1.11.1.min.js"></script>
    <script type="text/javascript" src="../../../jqwidgets/jqxcore.js"></script>
    <script type="text/javascript" src="../../../jqwidgets/jqxbuttons.js"></script>
    <script type="text/javascript" src="../../../jqwidgets/jqxscrollbar.js"></script>
    <script type="text/javascript" src="../../../jqwidgets/jqxdatatable.js"></script>
    <script type="text/javascript" src="../../../jqwidgets/jqxlistbox.js"></script>
    <script type="text/javascript" src="../../../jqwidgets/jqxdropdownlist.js"></script>
    <script type="text/javascript" src="../../../jqwidgets/jqxdata.js"></script>
    <script type="text/javascript" src="../../../jqwidgets/jqxtooltip.js"></script>
    <script type="text/javascript" src="../../../jqwidgets/jqxinput.js"></script>
    <script type="text/javascript" src="../../../scripts/demos.js"></script>
    <script type="text/javascript" src="../../../jqwidgets/jqxangular.js"></script>
    <script type="text/javascript">
        var that = this;
        var demoApp = angular.module("demoApp", ["jqwidgets"]);
        demoApp.controller("demoController", function ($scope, $compile) {           
            var editrow = -1;
            var grid, cancelButtons, editButtons;
            $scope.gridSettings =
              {
                  created: function(args)
                  {
                      grid = args.instance;
                  },
                  width: 850,
                  source:  new $.jqx.dataAdapter({
                      dataFields: [
                          { name: 'OrderID', type: 'int' },
                          { name: 'Freight', type: 'float' },
                          { name: 'ShipName', type: 'string' },
                          { name: 'ShipAddress', type: 'string' },
                          { name: 'ShipCity', type: 'string' },
                          { name: 'ShipCountry', type: 'string' },
                          { name: 'ShippedDate', type: 'date' }
                      ],
                      root: "Orders",
                      record: "Order",
                      dataType: "xml",
                      id: 'OrderID',
                      url: "../../sampledata/orderdetails.xml",
                      addRow: function (rowID, rowData, position, commit) {
                          // synchronize with the server - send insert command
                          // call commit with parameter true if the synchronization with the server is successful 
                          // and with parameter false if the synchronization failed.
                          // you can pass additional argument to the commit callback which represents the new ID if it is generated from a DB.
                          commit(true);
                      },
                      updateRow: function (rowID, rowData, commit) {
                          // synchronize with the server - send update command
                          // call commit with parameter true if the synchronization with the server is successful 
                          // and with parameter false if the synchronization failed.
                          commit(true);
                      },
                      deleteRow: function (rowID, commit) {
                          // synchronize with the server - send delete command
                          // call commit with parameter true if the synchronization with the server is successful 
                          // and with parameter false if the synchronization failed.
                          commit(true);
                      }
                  }),
                  pageable: true,
                  sortable: true,
                  altRows: true,
                  editable: true,
                  editSettings: { saveOnPageChange: true, saveOnBlur: true, saveOnSelectionChange: false, cancelOnEsc: true, saveOnEnter: true, editOnDoubleClick: false, editOnF2: false },
                  // called when AngularJS DataTable is going to be rendered.
                  rendering: function () {
                      // destroys all buttons.
                      if (cancelButtons && cancelButtons.length > 0) {
                          for (var i = 0; i < cancelButtons.length; i++) {
                              cancelButtons[i].destroy();
                              editButtons[i].destroy();
                          }
                          cancelButtons = null;
                          editButtons = null;
                      }
                  },
                  // called when AngularJS DataTable is rendered.
                  rendered: function () {
                          cancelButtons = new jqxButton(".cancelButtons");
                          editButtons = new jqxButton(".editButtons");
                          var editClick = function (event) {
                              var target = $(event.target);
                              // get button's value.
                              var value = target.val();
                              // get clicked row.
                              var rowIndex = parseInt(event.target.getAttribute('data-row'));
                              if (isNaN(rowIndex)) {
                                  return;
                              }

                              if (value == "Edit") {
                                  // begin edit.
                                  grid.beginRowEdit(rowIndex);
                                  target.parent().find('.cancelButtons').show();
                                  target.val("Save");
                              }
                              else {
                                  // end edit and save changes.
                                  target.parent().find('.cancelButtons').hide();
                                  target.val("Edit");
                                  grid.endRowEdit(rowIndex);
                              }
                          }

                          $(".editButtons").on('click', function (event) {
                              editClick(event);
                          });

                          $(".cancelButtons").click(function (event) {
                              // end edit and cancel changes.
                              var rowIndex = parseInt(event.target.getAttribute('data-row'));
                              if (isNaN(rowIndex)) {
                                  return;
                              }
                              grid.endRowEdit(rowIndex, true);
                          });                     
                  },
                  pagerButtonsCount: 8,
                  columns: [
                    { text: 'Order ID', editable: false, dataField: 'OrderID', width: 200 },
                    { text: 'Freight', dataField: 'Freight', cellsFormat: 'f2', cellsAlign: 'right', align: 'right', width: 200 },
                    {
                        text: 'Ship Country', dataField: 'ShipCountry', width: 150,
                        columnType: 'custom',
                        createEditor: function (row, cellValue, editor, width, height) {
                            // create jqxInput editor.
                            var textBox = $("<input style='padding-left: 4px; box-sizing: border-box; -moz-box-sizing: border-box; border: none;'/>").appendTo(editor);;
                            var countries = new Array("Afghanistan", "Albania", "Algeria", "Andorra", "Angola", "Antarctica", "Antigua and Barbuda", "Argentina", "Armenia", "Australia", "Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia", "Bosnia and Herzegovina", "Botswana", "Brazil", "Brunei", "Bulgaria", "Burkina Faso", "Burma", "Burundi", "Cambodia", "Cameroon", "Canada", "Cape Verde", "Central African Republic", "Chad", "Chile", "China", "Colombia", "Comoros", "Congo, Democratic Republic", "Congo, Republic of the", "Costa Rica", "Cote d'Ivoire", "Croatia", "Cuba", "Cyprus", "Czech Republic", "Denmark", "Djibouti", "Dominica", "Dominican Republic", "East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia", "Fiji", "Finland", "France", "Gabon", "Gambia", "Georgia", "Germany", "Ghana", "Greece", "Greenland", "Grenada", "Guatemala", "Guinea", "Guinea-Bissau", "Guyana", "Haiti", "Honduras", "Hong Kong", "Hungary", "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica", "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Korea, North", "Korea, South", "Kuwait", "Kyrgyzstan", "Laos", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", "Macedonia", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", "Mauritania", "Mauritius", "Mexico", "Micronesia", "Moldova", "Mongolia", "Morocco", "Monaco", "Mozambique", "Namibia", "Nauru", "Nepal", "Netherlands", "New Zealand", "Nicaragua", "Niger", "Nigeria", "Norway", "Oman", "Pakistan", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Poland", "Portugal", "Qatar", "Romania", "Russia", "Rwanda", "Samoa", "San Marino", " Sao Tome", "Saudi Arabia", "Senegal", "Serbia and Montenegro", "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "Spain", "Sri Lanka", "Sudan", "Suriname", "Swaziland", "Sweden", "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "Togo", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "Uruguay", "Uzbekistan", "Vanuatu", "Venezuela", "Vietnam", "Yemen", "Zambia", "Zimbabwe");
                            var input = new jqxInput(textBox, { source: countries, width: '100%', height: '100%' });
                            input.val(cellValue);
                        },
                        initEditor: function (row, cellValue, editor) {
                            // set jqxInput editor's initial value.
                            editor.find('input').val(cellValue);
                        },
                        getEditorValue: function (index, value, editor) {
                            // get jqxInput editor's value.
                            return editor.find('input').val();
                        }
                    },
                    { text: 'Shipped Date', dataField: 'ShippedDate', cellsAlign: 'right', align: 'right', cellsFormat: 'd', width: 170 },
                    {
                        text: 'Edit', cellsAlign: 'center', align: "center", columnType: 'none', editable: false, sortable: false, dataField: null, cellsRenderer: function (row, column, value) {
                            // render custom column.
                            return "<button data-row='" + row + "' class='editButtons'>Edit</button><button style='display: none; margin-left: 5px;' data-row='" + row + "' class='cancelButtons'>Cancel</button>";
                        }
                    }
                  ]
              };
        });
    </script>
</head>
 <body ng-controller="demoController">
    <jqx-data-table jqx-settings="gridSettings"></jqx-data-table>
</body>
</html>
